package com.snail.starter.utils.id;///**
// * 2025/01/01 - 2025/12/31
// */
//package com.snail.start.utils.id;
//
//import com.snail.starter.redis.enums.CommonRedisKeyEnum;
//import com.snail.starter.redis.holder.RedisHolder;
//
//import javax.annotation.Resource;
//import java.util.concurrent.atomic.AtomicLong;
//
///**
// * @author zgadmin
// * @date 2025/2/21 14:12
// */
//public class HighAvailabilityIdGeneratorServer implements IdGeneratorServer {
//
//    @Resource
//    RedisHolder redisHolder;
//
//
//    private AtomicLong index;
//
//    private AtomicLong minId;
//
//    private AtomicLong maxId;
//
//    private final long delta;
//
//    private final double threshold;
//
//    public HighAvailabilityIdGeneratorServer() {
//        delta = 300L;
//        threshold = 0.8D;
//        index = new AtomicLong(0);
//        pull();
//    }
//
//    @Override
//    public String nextId() {
//        return String.valueOf(nextLongId());
//    }
//
//    @Override
//    public long nextLongId() {
//        checkPull();
//        index.incrementAndGet();
//        return minId.getAndIncrement();
//    }
//
//    @Override
//    public String nextShortId() {
//        checkPull();
//        return null;
//    }
//
//    private void checkPull() {
//        if (index.get() > delta * threshold) {
//            pull();
//        }
//    }
//
//    private synchronized void pull() {
//        if (index.get() > delta * threshold) {
//            maxId = new AtomicLong(redisHolder.increment(CommonRedisKeyEnum.COMMON_BUSINESS_KEY_FIRST, "id", delta));
//            minId = new AtomicLong(maxId.addAndGet(-delta));
//        }
//    }
//
//}